package BLC

import (
	"fmt"
	"time"
)

type Block struct {  //定义一个区块
	//1.区块高度（编号）
	Height int64
	//2.上一个区块的Hash
	PrevBlockHash []byte
	//3.交易数据
	Data []byte
	//4.时间戳
	Timestamp int64
	//5.Hash
	Hash []byte
	//6.Nonce 用于工作量证明
	Nonce int64
}

//1.创建新的区块
func NewBlock(data string, height int64, preBlockHash []byte) *Block {
	//创建区块 block--指针
	block := &Block{height, preBlockHash, []byte(data), time.Now().Unix(), nil, 0}

	//调用工作量证明的方法并且返回有效的hash和Nonce
	pow := NewProofOfWork(block)

	//挖矿进行验证
	hash, nonce := pow.Run()

	block.Hash = hash[:]
	block.Nonce = nonce

	fmt.Println() //打印换行
	//return：当前区块的高度，前一个区块的hash，交易数据，时间戳，当前区块的hash,工作量证明Nonce
	return block
}

//2.单独写一个方法，生成创世区块
func CreateGenesisBlock(data string) *Block {
	return NewBlock(data, 1, []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
}
